package com.starry.module.system.core.role.service;

import com.starry.core.common.domain.vo.PageVo;
import com.starry.module.system.api.role.domain.qo.SysRolePageQo;
import com.starry.module.system.api.role.domain.qo.SysRoleQo;
import com.starry.module.system.api.role.domain.vo.SysRoleDtlVo;
import com.starry.module.system.api.role.domain.vo.SysRoleVo;

import java.util.List;
import java.util.Set;

/**
 * 系统角色-服务
 *
 * @author xiaoke
 */
public interface SysRoleService {

    /**
     * 分页查询所有数据
     *
     * @param pageQo 查询实体
     * @return 所有数据
     */
    PageVo<SysRoleVo> page(SysRolePageQo pageQo);

    /**
     * 通过主键查询单条数据
     *
     * @param id 主键
     * @return 单条数据
     */
    SysRoleDtlVo getById(Long id);

    /**
     * 新增数据
     *
     * @param sysRoleQo 实体对象
     * @return 新增结果
     */
    Long save(SysRoleQo sysRoleQo);

    /**
     * 判断角色是否存在
     *
     * @param roleIdList 角色id集合
     * @return true 存在
     */
    boolean existRoleList(Set<Long> roleIdList);

    /**
     * 判断角色状态是否启用
     *
     * @param roleIdList 角色id集合
     * @return true/false
     */
    boolean exitsRoleListStaus(Set<Long> roleIdList);

    /**
     * 根据用户id获取角色列表
     *
     * @param id 用户id
     * @return 角色列表
     */
    List<SysRoleVo> getByUserIdList(Long id);

    /**
     * 修改数据
     *
     * @param sysRoleQo 实体对象
     */
    void updateById(SysRoleQo sysRoleQo);

    /**
     * 删除数据
     *
     * @param idList 主键集合
     */
    void removeByIds(Set<Long> idList);

    /**
     * 启用数据
     *
     * @param idList 主键集合
     */
    void enable(Set<Long> idList);

    /**
     * 禁用数据
     *
     * @param idList 主键集合
     */
    void disable(Set<Long> idList);

    /**
     * 查询角色列表
     *
     * @param pageQo 查询实体
     * @return 所有数据
     */
    List<SysRoleVo> findList(SysRolePageQo pageQo);

    /**
     * 保存租户管理员角色
     *
     * @param menuIdList 菜单id集合
     */
    Long saveTenantRoleAdmin(Set<Long> menuIdList);
}

